;
(function($) {
	// 拖动状态
	var dragFlag = {
		iskeep : 0,
		offsetX : 0,
		offsetY : 0,
		startX : 0,
		startY : 0,
		target : null
	};
	// 选择对象的公共属性
	var cellRange = {
		sr : 0,
		sc : 0,
		er : 0,
		ec : 0
	};
	$.fn.gsheet = function(styles, datas) {
		// 存储系统样式
		_styles = {
			hasHeader : 1,
			rows : 30,
			cols : 10,
			colwidth : [100, 200, 100, 100, 100, 100, 100, 100, 100, 100],
			defaultColWidth : 100,
			rowheight : [20, 30, 20, 20, 20, 20, 20, 20, 20, 20],
			defaultRowHeight : 20
		};
		if (styles != undefined) {
			styles = $.fn.extend(_styles, styles);
			$(document).data("dev.styles", styles);
		} else {
			styles = $(document).data("dev.styles");
		}
		// 存储系统数据
		if (datas != undefined) {
			$(document.data("dev.datas"), datas);
		}
		// 遍历得到系统样式
		this.getstyles = function() {

		};
		// 得到主对象
		$this = this.each(function() {
					return $(this);

				});
		// =============================================
		// 函数部分
		// 取单元格的高度
		getrh = function(row) {
			// 需要考虑单元格的合并部分
			h = styles.rowheight[row];
			if (h == undefined || h == 0)
				h = styles.defaultRowHeight;
			return h;
		};
		// 取单元格的宽度
		getcw = function(col) {
			// 需要考虑单元格的合并部分
			w = styles.colwidth[col];
			if (w == undefined || w == 0)
				w = styles.defaultColWidth;
			return w;
		};
		// 单元格左
		getcl = function(col) {
			w = 0;
			for (var i = 0; i < col; i++) {
				w += getcw(i);
			}
			return w;
		};
		// 单元格上
		getct = function(row) {
			t = 0;
			for (var i = 0; i < row; i++) {
				t += getrh(i);
			}
			return t;
		};
		// n2c 数字转成行标abc
		n2c = function(n) {
			m = parseInt(n / 26);
			m1 = n % 26;
			s = "";
			if (m > 0)
				s = String.fromCharCode(m + 64);
			s1 = s + String.fromCharCode(m1 + 65);
			return s1;
		};
		// c2n 行标符号abc转成数字
		c2n = function(c) {
			c = c.toUpperCase();
			m = 0;
			n = (c.charCodeAt(0) - 65);
			if (c.length == 2) {
				n = (c.charCodeAt(0) - 64) * 26;
				m = c.charCodeAt(1) - 65;
			}
			return n + m;
		};
		// c2r 行标符号转行号
		c2r = function(c) {
			return c.match(/[\d]+/);
		};
		// c2c 行标符号转列号(数值)
		c2c = function(c) {
			s = c.match(/[a-zA-Z]+/);
			return c2n(s.toString());
		};
		// 绘制单元格
		createborder = function() {
			if (styles.hasHeader != undefined && styles.hasHeader == 1) {
				// div toolbar 工具栏
				_dtb = $("<div class='dtb'>toolbar</div>").appendTo($this);
				// div coor 角标
				_dcr = $("<div class='dcr'>X</div>").appendTo($this);
				// div col header行标
				_dch = $("<div class='dch'/>").appendTo($this);
				dchcl = $("<div id='dchcl' style='z-index：-1;float:none;border:1px solid red;top:0px;width:4px;height:22px;position:absolute'></div>")
						.appendTo(_dch);
				// 设置行标单元格
				var os = $(_dch).offset();
				left = os.left;
				for (var i = 0; i < styles.cols; i++) {
					// 行标单元格
					// Lx为单元格的左边位置
					// Wx为单元格的宽度
					_dchc = $("<div id='C" + i.toString() + "'class='dchc HL"
							+ i.toString() + " HW" + i.toString() + "'>"
							+ n2c(i) + "</div>").appendTo(_dch);
					// $("<div
					// class='dchcl'style='float:right;position:relative;border:1px
					// solid red;width:5px;height:22px' >"
					// + "</div>").appendTo(_dchc);
				}
				// div row header列标
				h = $this.height();
				h1 = $(_dtb).height();
				h2 = $(_dch).height();
				h = h - h1 - h2;
				_drh = $("<div class='drh'></div>").appendTo($this).height(h);
				os = $(_drh).offset();
				top = os.top;
				// 设置列标单元格
				for (var i = 0; i < styles.rows; i++) {
					_drhc = $("<div id='R" + i.toString() + "' class='drhc R"
							+ i.toString() + "'>" + i.toString() + "</div>")
							.appendTo($(_drh));

				}
			};
			// dma div main area主表格显示的div区
			h = $this.height();
			h1 = $(_dtb).height();
			h2 = $(_dch).height();
			h = h - h1 - h2;
			dma = $("<div class='dma'/>").appendTo($this).height(h);
			for (var i = 0; i < styles.rows; i++) {
				col = 0;
				for (var j = 0; j < styles.cols; j++) {
					// dmac 主表格单元格
					_dmac = $("<div id='" + n2c(j) + i.toString()
							+ "' class='dmac L" + j.toString() + " W" + j
							+ " R" + i.toString() + "'>" + i + "-" + j
							+ "</div>").appendTo(dma);
					col++;
				}
			}
			// 设置表格样式
			top1 = 0;
			for (var i = 0; i < styles.rows; i++) {
				$(".R" + i.toString()).css("height", getrh(i) - 1).css("top",
						top1);
				top1 += getrh(i);
			}
			left = 0;
			for (var i = 0; i < styles.cols; i++) {
				$(".L" + i.toString()).css("left", left);
				$(".W" + i.toString()).css("width", getcw(i) - 1);
				$(".HL" + i.toString()).css("left", left);
				$(".HW" + i.toString()).css("width", getcw(i));
				left += getcw(i);
			}
		};
		colresize = function(col, offsetWidth) {
			// width
			w = parseInt($(".HW" + col).css("width")) + offsetWidth;
			$(".HW" + col).css("width", w);
			$(".W" + col).css("width", w - 1);
			for (var i = parseInt(col) + 1; i < styles.cols; i++) {
				// left
				left = parseInt($(".HL" + i).css("left")) + offsetWidth;
				$(".HL" + i).css("left", left);
				$(".L" + i).css("left", left);
			}
		};
		// 绑定事件
		bindevent = function() {
			// 滚动条
			$(".dma").scroll(function(e) {
						$(".dch").scrollLeft(this.scrollLeft);
						$(".drh").scrollTop(this.scrollTop);
					});
			// 单击，选择单元格
			$(".dmac").click(function(e) {
						// 生成选择范围对象

						id = $(this).attr("id");
						// 设置选择背景属性
						$(".dmac").removeAttr("s-damc");
						$(this).attr("s-damc", "");
						$(".dchc").removeAttr("s-dchc");
						$("#C" + c2c(id)).attr("s-dchc", "");
						$(".drhc").removeAttr("s-drhc");
						$("#R" + c2r(id)).attr("s-drhc", "");
						alert(e.shiftKey);

					});
			// 双击，修改单元格
			$(".dmac").dblclick(function(e) {
						alert("double clicked!");
					});
			$(document).mousemove(function(e) {
						if (dragFlag.iskeep == 0)
							return;
						var x = e.clientX - dragFlag.offsetX;
						$("#dchcl").css("left", x);
					});
			$(".dchc").mousemove(function(e) {
				// 绝对坐标
				x = $(this).position().left;
				x1 = parseInt($(this).offset().left);
				x2 = e.clientX;
				w = parseInt($(this).css("width"));
				if (dragFlag.iskeep == 1)
					return;
				if (x2 > x1 + w - 4) {
					$("#dchcl").css("left", x + w - 6).css("z-index", 100)
							.show();
					dragFlag.target = this;
				} else
					$("#dchcl").hide();
					// $(".dtb").html($(".dtb").html() + "<br>" + " 相对:" + x + "
					// 绝对:"
					// + x1 + " 当前:" + x2 + " 宽:" + w);
			});
			$("#dchcl").hover(function(e) {
				$(this).css("cursor", "col-resize").css("z-index", 100);
					// $(".dtb").html($(".dtb").html() + ",l:" + e.clientX +
					// ",p:"
					// + $(this).parent().position().left);
				});
			$("#dchcl").mousedown(function(e) {
				dragFlag.iskeep = 1;
				dragFlag.offsetX = e.clientX - this.offsetLeft;
				dragFlag.startX = e.clientX;
				$('#dchcl').show();
					// dchcl.css("left", $(this).css("left"));
				});
			$(document).mouseup(function(e) {
				if (dragFlag.iskeep == 1) {
					dragFlag.iskeep = 0;
					$("#dchcl").hide();
					t = $(dragFlag.target);
					c = t.attr("id").substring(1, 3);
					w = e.clientX - dragFlag.startX;// +
					// parseInt(t.css("width"));
					colresize(c, w);
				}
					// alert("t:" + $(dragFlag.target).attr("id") + " py:"
					// + dragFlag.offsetX + "curr:" + e.clientX + " jl:"
					// + (e.clientX - dragFlag.startX));
				});
		};
		// 根据存储的数据及样式重新定制框架
		init = function(styles, datas) {
			// 初始化表格
			this.createborder();
			// 绑定事件
			bindevent();
			// resize();
		};
		// 初始化动作
		if (styles != undefined || datas != undefined) {
			init(styles, datas);
		}
		this.init = init;
		return this;
	};
})(jQuery);